// Package db px-table-checksum-go/db/task_model.go 定义校验任务相关模型 (数据库内部使用)
package db

// ChecksumTask 封装了 checksum 计算所需的信息，用于在 worker 间传递。
// 这个结构体是 db 包内部使用的，与 models.ChecksumTask 可能有细微差别，
// 通过转换函数与外部模型保持一致。
type ChecksumTask struct {
	DBID           string        // 目标 DBID (用于区分源/目标库的结果存储)
	SchemaName     string        // 库名
	TableName      string        // 表名
	ChunkNo        int           // Chunk 编号 (从1开始), 特殊值 -1 表示结束信号
	StartKeyString string        // Chunk 起始键 (逗号分隔的字符串形式, 例如 '100,valA')
	StartKeyValues []interface{} // Chunk 起始键 (解析后的 Go 值列表)
	SQLTemplate    string        // 查询 chunk 数据的 SQL 模板
	NumKeyColumns  int           // 键的列数 (KeyInfo.NumColumns() 获取)
	KeyInfo        *KeyInfo      // 表的键信息 (包含列名等)
	Error          string        // 如果 ChunkNo = -1 且有错误，记录错误信息
	// 其他字段，例如 CRC32 结果和行数，通常在 Calculator 函数内部计算后返回，
	// 然后在 worker 中封装到 db.ChecksumResult 结构体中存储到校验库。
	// Task 对象本身主要用于传递“要处理哪个块”的信息。
}

// NumColumns 返回键的列数
func (k *KeyInfo) NumColumns() int {
	if k == nil || k.Columns == nil {
		return 0
	}
	return len(k.Columns)
}
